package j2024.j202410;

import java.util.*;

public class j1017 {
    //ISBN号码
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();
        int index = 0;
        int i = 1;
        int ret = 0;
        while(index<str.length()-1){
            if(str.charAt(index)=='-'){
                index++;
                continue;
            }
            int val = str.charAt(index)-'0';
            ret+=(val*i);
            index++;i++;
        }
        ret%=11;
        char s = (char)(ret+'0');
        if(s== str.charAt(str.length()-1)){
            System.out.println("Right");
        }else {
            char[] tmp = str.toCharArray();
            tmp[tmp.length-1] = s;
            str = new String(tmp);
            System.out.println(str);
        }
    }
    //kotori和迷宫
    public static char[][] arr;
    public static int[] dx = new int[]{0,0,-1,1};
    public static int[] dy = new int[]{1,-1,0,0};
    public static int[][] vis;
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(),m = in.nextInt();
        arr = new char[n][m];
        for (int i = 0; i < n; i++) {
            arr[i] = in.next().toCharArray();
        }
        Stack<int[]> s = new Stack<>();
        vis = new int[n][m];int step = Integer.MAX_VALUE;int cou = 0;
        for (int i = 0; i < n; i++) {
            Arrays.fill(vis[i],0);
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if(arr[i][j]=='k'){
                    s.push(new int[]{i,j});
                    vis[i][j] = 0;
                    break;
                }
            }
        }

        while(!s.isEmpty()){
            int[] tmp = s.pop();
            int a = tmp[0],b = tmp[1];
            for (int i = 0; i < 4; i++) {
                int x = a+dx[i],y = b+dy[i];
                if(x>=0 && x<n && y>=0 && y<m && vis[x][y]==0 && arr[x][y]!='*'){
                    vis[x][y] = vis[a][b]+1;
                    if(arr[x][y]=='e'){
                        cou++;
                        step = Math.min(step,vis[x][y]);
                    }else{
                        s.push(new int[]{x,y});
                    }
                }
            }
        }
        System.out.println(cou+" "+step);

    }



    int[] ax = new int[]{0,0,-1,1};
    int[] ay = new int[]{1,-1,0,0};
    boolean[][] Vis;
    int step = 0;
    public int solve (int[][] matrix) {
        // write code here
        Vis = new boolean[matrix.length][matrix[0].length];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                Vis[i][j] = true;
                dfs(matrix,i,j,1);
                Vis[i][j] = false;
            }
        }
        return step;
    }
    public void dfs(int[][] m,int i,int j,int cou){
        for (int k = 0; k < 4; k++) {
            int x = i+ax[k],y = j+ay[k];
            if (x>=0 && x<m.length && y>=0 && y<m[0].length && !Vis[x][y] && m[x][y]>m[i][j]){
                Vis[i][j] = true;
                dfs(m,i,j,cou+1);
                Vis[i][j] = false;
            }else {
                step = Math.max(step,cou);
            }
        }
    }

    /**
     * 150. 逆波兰表达式求值
     * 给你一个字符串数组 tokens ，表示一个根据 逆波兰表示法 表示的算术表达式。
     *
     * 请你计算该表达式。返回一个表示表达式值的整数。
     *
     * 注意：
     *
     * 有效的算符为 '+'、'-'、'*' 和 '/' 。
     * 每个操作数（运算对象）都可以是一个整数或者另一个表达式。
     * 两个整数之间的除法总是 向零截断 。
     * 表达式中不含除零运算。
     * 输入是一个根据逆波兰表示法表示的算术表达式。
     * 答案及所有中间计算结果可以用 32 位 整数表示。
     * @param tokens
     * @return
     */
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(int i = 0;i < tokens.length;i++) {
            String tmp = tokens[i];
            if(!isOpearation(tmp)) {
                Integer val = Integer.valueOf(tmp);
                stack.push(val);
            }else {
                // +  - * /
                Integer val2 = stack.pop();
                Integer val1 = stack.pop();
                switch(tmp) {
                    case "+":
                        stack.push(val1+val2);
                        break;
                    case "-":
                        stack.push(val1-val2);
                        break;
                    case "*":
                        stack.push(val1*val2);
                        break;
                    case "/":
                        stack.push(val1/val2);
                        break;
                }
            }
        }
        return stack.pop();
    }

    public boolean isOpearation(String s) {
        if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
            return true;
        }
        return false;
    }
}
